package com.woniu.commons.util;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class DateTimeUtils {
    private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
    /**
     * 将 LocalDateTime 转换为毫秒数。
     * @param localDateTime 要转换的 LocalDateTime 对象
     * @return 转换后的毫秒数
     */
    public static long LocalDateTimeToMillis(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()).getTime();
    }

    /**
     * 在给定的毫秒数上添加指定的分钟数。
     * @param millis 要添加分钟数的毫秒数
     * @param minutesToAdd 要添加的分钟数
     * @return 添加分钟数后的毫秒数
     */
    public static long addMinutes(long millis, int minutesToAdd) {
        return millis + ((long) minutesToAdd * 60 * 1000);
    }

    /**
     * 检查给定的时间是否超时。
     * @param startTime 开始时间的毫秒数
     * @param timeoutMinutes 超时的分钟数
     * @return 如果已经超时则返回 true，否则返回 false
     */
    public static boolean isTimeout(long startTime, int timeoutMinutes) {
        long now = new Date().getTime();
        int minute = (int) ((now - startTime) / (1000 * 60));
        return minute >= timeoutMinutes;
    }
    /**
     * 将毫秒数格式化为指定格式的字符串。
     * @param millis 要格式化的毫秒数
     * @param pattern 格式化模式，例如："yyyy-MM-dd HH:mm:ss"
     * @return 格式化后的字符串
     */
    public static String formatMillis(long millis, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(new Date(millis));
    }
    /**
     * 将字符串转换为 LocalDateTime 对象。
     * @param dateTimeString 要转换的日期时间字符串
     * @param pattern 输入字符串的格式模式，例如："yyyy-MM-dd HH:mm:ss"
     * @return 转换后的 LocalDateTime 对象，如果转换失败则返回 null
     */
    public static LocalDateTime parseLocalDateTime(String dateTimeString, String pattern) {
        try {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            return LocalDateTime.parse(dateTimeString, formatter);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将字符串转换为 LocalDateTime 对象。
     * @param dateTimeString 要转换的日期时间字符串
     * @return 转换后的 LocalDateTime 对象，如果转换失败则返回 null
     */
    public static LocalDateTime String2LocalDateTime(String dateTimeString) {
        return parseLocalDateTime(dateTimeString, DEFAULT_PATTERN);
    }

}